home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / smpi.zip / SMPI.C < prev    next >
C/C++ Source or Header  |  1993-03-11  |  5KB  |  160 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. #include "smpi.h"
  5.  
  6. PCHAR string = "\\\\.\\Scsi0:";
  7. PCHAR DbgString = "This string is in the data buffer area\n";
  8. PCHAR UniqueString = "MyDrvr";
  9.  
  10.  
  11. VOID main(VOID)
  12. {
  13.     BOOLEAN     bRc;
  14.     DWORD       cbReturnedData;
  15.     HANDLE      hDevice;
  16.     SHORT       DbgStringLength = strlen(DbgString);
  17.     SHORT       UniqueStringLength = strlen(UniqueString);
  18.     SRB_BUFFER  smpi;
  19.  
  20. //*************************************************************
  21. //
  22. // obtain a handle to the SCSI miniport driver
  23. //
  24. //*************************************************************
  25.  
  26.     printf("Attempting to get a handle for %s\n",string);
  27.  
  28.     hDevice = CreateFile(string,
  29.        GENERIC_READ,
  30.        FILE_SHARE_READ,
  31.        NULL,
  32.        OPEN_EXISTING,
  33.        0,
  34.        NULL);
  35.  
  36.     if (hDevice == (HANDLE)-1)
  37.        {
  38.        printf("Attempt failed! Error number = %d\n",GetLastError());
  39.        return;
  40.        }
  41.  
  42.     printf("Attempt on %s succeeded\n\n",string);
  43.  
  44. //*************************************************************
  45. //
  46. // fill in the SRB_IO_CONTROL structure
  47. //
  48. //*************************************************************
  49.  
  50.     smpi.sic.HeaderLength = sizeof(SRB_IO_CONTROL);
  51.     smpi.sic.Length = 0;
  52.  
  53.     _memccpy(&smpi.sic.Signature,UniqueString,0,UniqueStringLength);
  54.  
  55.     smpi.sic.Timeout = 10000;
  56.     smpi.sic.ControlCode = SMP_RETURN_3F;
  57.  
  58. //*************************************************************
  59. //
  60. // call the driver
  61. //
  62. //*************************************************************
  63.  
  64.     bRc = DeviceIoControl(hDevice,                  // device handle
  65.                 IOCTL_SCSI_MINIPORT,                // io control code
  66.                 &smpi,                              // input buffer
  67.                 sizeof(SRB_IO_CONTROL),             // input buffer length
  68.                 &smpi,                              // output buffer
  69.                 sizeof(SRB_IO_CONTROL),             // output buffer length
  70.                 &cbReturnedData,                    // # bytes returned
  71.                 NULL);                              // synchronous call
  72.  
  73. //*************************************************************
  74. //
  75. // check for errors
  76. //
  77. //*************************************************************
  78.  
  79.     if (!bRc)
  80.        printf("DeviceIoControl request for SMP_RETURN_3F failed : %d\n",
  81.           GetLastError());
  82.  
  83. //*************************************************************
  84. //
  85. // verify the driver's access to the SRB_IO_CONTROL structure
  86. //
  87. //*************************************************************
  88.     
  89.     else {
  90.        printf("The SMP_RETURN_3F Return Code is 0x%08Xh\n",
  91.           smpi.sic.ReturnCode);
  92.        printf("The number of bytes returned by the driver is %d\n\n",
  93.           cbReturnedData);
  94.        }
  95.  
  96. //*************************************************************
  97. //
  98. // fill in the SRB_IO_CONTROL structure
  99. //
  100. //*************************************************************
  101.  
  102.     smpi.sic.HeaderLength = sizeof(SRB_IO_CONTROL);
  103.     smpi.sic.Length = 100;                       // random large number
  104.  
  105.     _memccpy(&smpi.sic.Signature,UniqueString,0,UniqueStringLength);
  106.  
  107.     smpi.sic.Timeout = 0;
  108.     smpi.sic.ControlCode = SMP_PRINT_STRING;
  109.  
  110.     strcpy(smpi.ucDataBuffer,DbgString);
  111.  
  112. //*************************************************************
  113. //
  114. // call the driver
  115. //
  116. //*************************************************************
  117.  
  118.     bRc = DeviceIoControl(hDevice,                  // device handle
  119.                 IOCTL_SCSI_MINIPORT,                // io control code
  120.                 &smpi,                              // input buffer
  121.                 sizeof(SRB_IO_CONTROL) +            // input buffer length
  122.                 DbgStringLength + 1,
  123.                 &smpi,                              // output buffer
  124.                 sizeof(SRB_IO_CONTROL) +            // output buffer length
  125.                 100,                                // random large number
  126.                 &cbReturnedData,                    // # bytes returned
  127.                 NULL);                              // synchronous call
  128.  
  129. //*************************************************************
  130. //
  131. // check for errors
  132. //
  133. //*************************************************************
  134.  
  135.     if (!bRc)
  136.        printf("DeviceIoControl request for SMP_PRINT_STRING failed : %d\n",
  137.           GetLastError());
  138.  
  139. //*************************************************************
  140. //
  141. // verify the driver's access to the SRB_IO_CONTROL structure
  142. //
  143. //*************************************************************
  144.     
  145.     else {
  146.        printf("%s",smpi.ucDataBuffer);
  147.        printf("The number of bytes returned by the driver is %d\n\n",
  148.           cbReturnedData);
  149.        }
  150.  
  151. //*************************************************************
  152. //
  153. // close the handle to the SCSI miniport driver
  154. //
  155. //*************************************************************
  156.  
  157.     CloseHandle(hDevice);
  158. }
  159.  
  160.